Моделирование внешней среды в отладчиках-симуляторах ACS-51, S-96 и PICsim.

Данная статья посвящена вопросу моделирования внешней среды при помощи отладчиков-симуляторов нашей фирмы. Мы постараемся объяснить, зачем может понадобиться такое моделирование, каким образом создается модель, какие существуют способы для взаимодействия модели процессора с моделью внешней среды. Для иллюстрации ключевых положений приведено несколько примеров моделирования одиночных процессов, а в конце статьи - пример полной модели внешней среды для несложной системы.


Зачем нужно моделировать внешнюю среду в симуляторе?

Процессор или однокристальный микроконтроллер, работающий в некоторой системе управления, всегда имеет дело с различными внешними процессами. К нему может быть подключена память и различные устройства ввода-вывода (например, АЦП), он принимает внешние сигналы от объекта управления и генерирует управляющие воздействия. Совокупность всех внешних процессов, и воздействующих на процессор, и генерируемых им, будем называть ВНЕШНЕЙ СРЕДОЙ.

Отлаживая программу при помощи симулятора, пользователь обычно следит за ходом ее выполнения, используя пошаговый режим и точки останова. При этом, если необходимо имитировать некоторый процесс, происходящий во внешней среде процессора, он должен вручную модифицировать какие-либо регистры процессора или ячейки памяти. Такой подход, конечно, не может обеспечить высокого качества отладки, более того, он требует дополнительных усилий пользователя, который должен помнить одновременно о двух вещах: о состоянии отлаживаемой программы и о состоянии внешней среды (модель которой находится только в его голове).

Казалось бы, при отладке при помощи эмулятора такой проблемы нет. Но для полноценной отладки и создания надежной программы необходим не только макет изделия, но и реальная система, в которой это изделие будет работать. В лабораторных условиях это зачастую это оказывается невозможным - представьте, что вы разрабатываете контроллер двигателя автомобиля, или самолета, или тепловоза, и Вам станет ясно, почему. Более того, даже отладка "с выездом на объект" не всегда возможна - представьте себе тот же самолет. Поэтому в таких случаях для отладки используются специальная дорогостоящая аппаратура, имитирующая поведение реального объекта управления.

Использование симулятора, обеспечивающего не только моделирование поведения процессора, но и симуляцию внешней среды, позволяет во многих случаях избежать необходимости в дорогостоящем оборудовании. Более того, можно вести разработку и отладку программного обеспечения, даже если аппаратура, на которой это ПО будет работать, еще не существует.


Создание модели внешней среды

Модель внешней среды - это набор из командных файлов, загруженных в симулятор. Командные файлы создаются пользователем при помощи любого текстового редактора. Для успешного выполнения этой задачи пользователь должен знать командный язык симулятора, уметь создавать командные файлы, изучить регистры специального назначения процессора и набор отладочных регистров симулятора, и, конечно, хорошо понимать основные принципы моделирования внешней среды при помощи симулятора.

При создании модели внешней среды рекомендуется пользоваться принципом модульности: для симуляции некоторого внешнего узла или процесса создавать отдельный командный файл. Затем несколько (до 48) командных файлов могут быть загружены в память симулятора, обеспечивая функционирование модели.

Как правило, необязательно моделировать внешнюю аппаратуру, достаточно моделировать процесс, посредством которого эта аппаратура взаимодействует с процессором. Во многих случаях можно автоматизировать проверку правильности работы отлаживаемой программы. Например, командный файл может измерять время реакции процессора на некоторое внешнее воздействие, и выдавать сообщение об ошибке, если оно превышает заданное значение.

Командные файлы имеют доступ ко всем ресурсам симулятора. Они передают воздействия на процессор и считывают его состояние при помощи операций с отладочными регистрами, памятью, или регистрами специального назначения процессора. Конечно, то, каким образом командные файлы взаимодействуют с процессором (и между собой), полностью зависит от того, как их напишет пользователь. Упомянем, что "главный" оператор командного языка, благодаря которому это возможно - это оператор WAIT.

Когда модель внешней среды загружена в память, возможно как пошаговое, так и непрерывное выполнение отлаживаемой программы, при этом модель внешней среды функционирует в соответствии с модельным временем процессора. Отметим, что нельзя пользоваться режимами выполнения "назад" (Backstep и.т.д.).

Каждый загруженный в симулятор командный файл выполняется непрерывно до тех пор, пока не встретится оператор WAIT, который приостанавливает выполнение командного файла до определенного момента модельного времени. Приостановленный оператором WAIT командный файл проверяет счетчик модельного времени между инструкциями процессора, и, если требуемое модельное время достигнуто, выполняется непрерывно до очередного оператора WAIT. Пока командный файл выполняется, счетчик модельного времени остановлен, поэтому процессор "не замечает" действий модели внешней среды.


Собственные данные командных файлов.

Помимо того, что командные файлы могут оперировать с регистрами процессора и его памятью, они могут размещать свои собственные данные в т.н. переменных оболочки. Существует два вида переменных оболочки: локальные внутри командного файла ("невидимые" для других командных файлов), и глобальные (доступные всем командным файлам).

Глобальные переменные имеют имена, начинающиеся с символа "#". Локальные переменные имеют имена, начинающиеся с "#_". Следует отметить, что переменные оболочки не требуют специального объявления; они создаются при первом же обращении к ним. Например, если командный файл считывает несуществующую переменную оболочки, то она автоматически создается со значением 0.

Глобальные переменные оболочки видны всем командным файлам, что позволяет легко передавать данные от одного командного файла к другому. Кроме того, они всегда доступны пользователю, который может проверять и модифицировать значения переменных оболочки, контролируя таким образом поведение системы в целом.

Локальные переменные оболочки доступны только одному командному файлу, тому, в котором они определены. Например, два разных командных файла могут использовать переменную с именем #_VAR для хранения данных, но при этом на самом деле будет существовать две переменные #_VAR, по экземпляру для каждого командного файла. Это исключает необходимость придумывать длинные уникальные имена для внутренних переменных командных файлов. Пользователь также имеет доступ к локальным переменным командных файлов. Чтобы обратиться к такой переменной, он должен указать имя вида #<имя_командного_файла>@_<имя_локальной_переменной>, например, #commfile@_VAR.

Командные файлы могут использовать области памяти процессора, которые не задействованы в отлаживаемой программе пользователя. Такой "трюковый" подход позволяет использовать память симулятора для многих полезных функций:

- для хранения данных, необходимых для симуляции внешней среды
- для отображения потоков выходных данных на экране
- для сохранения выходных данных в файлах (для последующего анализа)
- для задания входных воздействий с клавиатуры
- для считывания входных воздействий из файлов
- для организации взаимодействия между различными командными файлами

Фактически, возможности использования памяти симулятора для симуляции внешней среды ограничены только фантазией пользователя и его опытом в создании командных файлов.



Published by NewIT Labs
NEW IT Labs